<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>opam %{OPAMVERSION}% API and libraries documentation</title>
    <style type="text/css">
table {
  margin: auto;
  border-collapse: collapse;
}
th {
  text-align: left;
  font-weight: bold;
}
a {
  text-decoration: none;
  color: #555;
  font-family: monospace;
}
tr.lib {
  font-size: 120%;
  font-weight: bold;
  background-color: #bbb;
  border-top: 1ex solid white;
}
td.libnote {
  background-color: #eee;
}
td.sublib {
  border-bottom: 1px solid black;
}
    </style>
  </head>
<body>

<h1>opam %{OPAMVERSION}% API and libraries documentation</h1>


<table>

<tr class="lib">
  <th><a href="opam-core"><code>src/core</code></a></th>
  <td><em>opam-core</em> library</td>
</tr>

<tr><td colspan="2" class="libnote">
    Generic standard and system library
</td></tr>

<tr><th><a href="opam-core/OpamVersion">opamVersion.ml</a></th>
  <td>(generated) Current opam version</td></tr>
<tr><th><a href="opam-core/OpamCoreConfig">opamCoreConfig.ml</a></th>
  <td>Configuration options for this lib (record, global reference and setter)</td></tr>
<tr><th><a href="opam-core/OpamVersionCompare">opamVersionCompare.ml</a></th>
  <td>Version comparison function used throughout. From the Dose suite.</td></tr>
<tr><th><a href="opam-core/OpamJson">opamJson.ml</a></th>
  <td>Wrapper on Jsonm; only needed for some debug options</td></tr>
<tr><th><a href="opam-core/OpamStd">opamStd.ml</a></th>
  <td>Generic stdlib functions (String, List, Option, Sys submodules...)</td></tr>
<tr><th><a href="opam-core/OpamConsole">opamConsole.ml</a></th>
  <td>Console output, ANSI color, logging and user querying</td></tr>
<tr><th><a href="opam-core/OpamCompat">opamCompat.ml</a></th>
  <td>Compatibility layer (Bytes, etc.) for different OCaml versions</td></tr>
<tr><th><a href="opam-core/OpamSHA">opamSHA.ml</a></th>
  <td>Pure OCaml implementation of SHA256/512 hashing functions</td></tr>
<tr><th><a href="opam-core/OpamShellCommand">opamShellCommand.ml</a></th>
  <td>A shell command syntax parser</td></tr>

<tr><td colspan="2" class="sublib">System handling</td></tr>

<tr><th><a href="opam-core/OpamProcess">opamProcess.ml</a></th>
  <td>Process and job handling, with logs, termination status, etc.</td></tr>
<tr><th><a href="opam-core/OpamSystem">opamSystem.ml</a></th>
  <td>Bindings of lots of filesystem and system operations</td></tr>
<tr><th><a href="opam-core/OpamHash">opamHash.ml</a></th>
  <td>Type and computation of file checksums</td></tr>
<tr><th><a href="opam-core/OpamFilename">opamFilename.ml</a></th>
  <td>Higher level file and directory name manipulation AND file operations,
    wrappers on OpamSystem using the filename type</td>
<tr><th><a href="opam-core/OpamDirTrack">opamDirTrack.ml</a></th>
  <td>Tracking of changes in a given filesystem subtree</td></tr>
<tr><th><a href="opam-core/OpamParallel">opamParallel.ml</a></th>
  <td>Parallel execution of jobs following a directed graph</td></tr>
<tr><th><a href="opam-core/OpamUrl">opamUrl.ml</a></th>
  <td>URL parsing and printing, with support for our different backends</td></tr>

<tr><td colspan="2" class="sublib">Windows support</td></tr>
<tr><th><a href="opam-core/OpamStubs">opamStubs.ml</a></th>
  <td>C stubs for Windows. A &ldquo;dummy&rdquo; alternate is provided for Unix, which doesn&rsquo;t require any C code</td></tr>
<tr><th><a href="opam-core/OpamStubsTypes">opamStubsTypes.ml</a></th>
  <td>Types in the stubs definitions (shared between both implementations)</td></tr>
<tr><th><a>opamInject.c</a></th>
  <td>Code for process injection shared between <a>opamWindows.c</a> and <a>opam-putenv.c</a></td></tr>
<tr><th><a>opamWindows.c</a></th>
  <td>C stubs for Windows</td></tr>
<tr><th><a>opamCommonStubs.c</a></th>
  <td>Common C stubs for Unix and Windows</td></tr>

<tr class="lib">
  <th><a href="opam-format"><code>src/format</code></a></th>
  <td><em>opam-format</em> library</td>
</tr>

<tr><td colspan="2" class="libnote">
    Definition of opam datastructures and its file interface
</td></tr>

<tr><th><a href="opam-format/OpamFormatConfig">opamFormatConfig.ml</a></th>
  <td>Configuration options for this lib (record, global reference and setter)</td></tr>
<tr><th><a href="opam-format/OpamTypes">opamTypes.mli</a></th>
  <td>Definitions of many types used throughout</td></tr>
<tr><th><a href="opam-format/OpamTypesBase">opamTypesBase.ml</a></th>
  <td>Helper functions on the base types. Often opened</td></tr>
<tr><th><a href="opam-format/OpamPath">opamPath.ml</a></th>
  <td>Defines the file hierarchy in ~/.opam</td></tr>

<tr><td colspan="2" class="sublib">Basic types, used as keys</td></tr>

<tr><th><a href="opam-format/OpamPackage">opamPackage.ml</a></th>
  <td>The package type, and package name type (name+version, values often called "nv" in the code)</td></tr>
<tr><th><a href="opam-format/OpamRepositoryName">opamRepositoryName.ml</a></th>
  <td>The repository type</td></tr>
<tr><th><a href="opam-format/OpamSwitch">opamSwitch.ml</a></th>
  <td>The switch type</td></tr>
<tr><th><a href="opam-format/OpamVariable">opamVariable.ml</a></th>
  <td>Opam variables with scope (global or module)</td></tr>
<tr><th><a href="opam-format/OpamSysPkg">opamSysPkg.ml</a></th>
  <td>The system package type</td></tr>

<tr><td colspan="2" class="sublib">More advanced types</td></tr>

<tr><th><a href="opam-format/OpamFilter">opamFilter.ml</a></th>
  <td>Formulas on variables, as used in opam files build scripts</td></tr>
<tr><th><a href="opam-format/OpamFormula">opamFormula.ml</a></th>
  <td>Formulas on packages, opt. with sub-formulas on versions, and conversion
    functions</td></tr>

<tr><td colspan="2" class="sublib">File format</td></tr>

<tr><th><a href="opam-format/OpamLineLexer">opamLineLexer.mll</a></th>
  <td>A simple lexer to list of lines, which are lists of words</td></tr>
<tr><th><a href="opam-format/OpamInterpLexer">opamInterpLexer.mll</a></th>
  <td>Opam format variable interpolation processor</td></tr>
<tr><th><a href="opam-format/OpamPp">opamPp.ml</a></th>
  <td>Bidirectional transformations on top of the parser and printer</td></tr>
<tr><th><a href="opam-format/OpamFormat">opamFormat.ml</a></th>
  <td>opam config files syntax and conversion tools</td></tr>
<tr><th><a href="opam-format/OpamFile">opamFile.ml</a></th>
  <td>Handles all opam file formats as record types and submodules, conversion to and from syntax</td></tr>

<tr class="lib">
  <th><a href="opam-repository"><code>src/repository</code></a></th>
  <td><em>opam-repository</em> library</td>
</tr>

<tr><td colspan="2" class="libnote">
    Handling of remote sources
</td></tr>

<tr><th><a href="opam-repository/OpamRepositoryConfig">opamRepositoryConfig.ml</a></th>
  <td>Configuration options for this lib (record, global reference, setter, initialisation)</td></tr>
<tr><th><a href="opam-repository/OpamRepositoryBackend">opamRepositoryBackend.ml</a></th>
  <td>Signature for repository handlers and some helpers for the repository type</td></tr>
<tr><th><a href="opam-repository/OpamRepositoryPath">opamRepositoryPath.ml</a></th>
  <td>Defines the file hierarchy in repositories</td></tr>
<tr><th><a href="opam-repository/OpamDownload">opamDownload.ml</a></th>
  <td>Configuration init and handling of downloading commands</td></tr>
<tr><th><a href="opam-repository/OpamHTTP">opamHTTP.ml</a></th>
  <td>Main HTTP backend</td></tr>
<tr><th><a href="opam-repository/OpamLocal">opamLocal.ml</a></th>
  <td>Rsync backend, for local or ssh sources</td></tr>
<tr><th><a href="opam-repository/OpamVCS">opamVCS.ml</a></th>
  <td>Layer for handling version control sources</td></tr>
<tr><th><a href="opam-repository/OpamDarcs">opamDarcs.ml</a></th>
  <td>Darcs support (through OpamVCS)</td></tr>
<tr><th><a href="opam-repository/OpamGit">opamGit.ml</a></th>
  <td>Git support (through OpamVCS)</td></tr>
<tr><th><a href="opam-repository/OpamHg">opamHg.ml</a></th>
  <td>Mercurial support (through OpamVCS)</td></tr>
<tr><th><a href="opam-repository/OpamRepository">opamRepository.ml</a></th>
  <td>Operations on repositories (update, fetch...) based on the above backends</td></tr>

<tr class="lib">
  <th><a href="opam-solver"><code>src/solver</code></a></th>
  <td><em>opam-solver</em> library</td>
</tr>

<tr><td colspan="2" class="libnote">
    Solver and Cudf interaction
</td></tr>

<tr><th><a href="opam-solver/OpamSolverConfig">opamSolverConfig.ml</a></th>
  <td>Configuration options for this lib (record, global reference, setter, initialisation)</td></tr>
<tr><th><a href="opam-solver/OpamActionGraph">opamActionGraph.ml</a></th>
  <td>Handles graphs of actions (package changes), based on ocamlgraph</td></tr>
<tr><th><a href="opam-solver/OpamCudfCriteria">opamCudfCriteria.ml</a></th>
  <td>Cudf criteria helper functions (string conversion, etc.)</td></tr>
<tr><th><a href="opam-solver/OpamCudfSolver">opamCudfSolver.ml</a></th>
  <td>Bindings to implementation of CUDF solvers, either built-in or external</td></tr>
<tr><th><a href="opam-solver/OpamCudf">opamCudf.ml</a></th>
  <td>Solver interaction, conversion of answer to solution</td></tr>
<tr><th><a href="opam-solver/OpamSolver">opamSolver.ml</a></th>
  <td>Entry point, conversion of universe to cudf, dependencies computation</td></tr>

<tr><td colspan="2" class="sublib">Built-in solver backends</td></tr>
<tr><th><a href="opam-solver/OpamBuiltinMccs">opamBuiltinMccs.ml.real</a></th>
  <td>Direct interface to the <a href="https://github.com/AltGr/ocaml-mccs">mccs</a> solver, if present</td></tr>
<tr><th><a href="opam-solver/OpamBuiltinZ3">opamBuiltinZ3.ml.real</a></th>
  <td>Direct interface to the <a href="https://github.com/Z3Prover/z3">Z3</a> solver, if present</td></tr>

<tr class="lib">
  <th><a href="opam-state"><code>src/state</code></a></th>
  <td><em>opam-state</em> library</td>
</tr>

<tr><td colspan="2" class="libnote">
    Handling of the ~/.opam hierarchy, repository and switch states
</td></tr>

<tr><th><a href="opam-state/OpamStateConfig">opamStateConfig.ml</a></th>
  <td>Configuration options for this lib (record, global reference, setter, initialisation)</td></tr>
<tr><th><a href="opam-state/OpamScript">opamScript.ml</a></th>
  <td>(generated) Shell config scripts as OCaml strings</td></tr>
<tr><th><a href="opam-state/OpamStateTypes">opamStateTypes.mli</a></th>
  <td>Defines the types holding global, repository and switch states</td></tr>
<tr><th><a href="opam-state/OpamFormatUpgrade">opamFormatUpgrade.ml</a></th>
  <td>Handles upgrade of an opam root from earlier opam versions</td></tr>
<tr><th><a href="opam-state/OpamSysPoll">opamSysPoll.ml</a></th>
  <td>Detection of host system (arch, os, distribution)</td></tr>
<tr><th><a href="opam-state/OpamGlobalState">opamGlobalState.ml</a></th>
  <td>Loading and handling of the global state of an opam root</td></tr>
<tr><th><a href="opam-state/OpamRepositoryState">opamRepositoryState.ml</a></th>
  <td>loading and handling of the repository state of an opam root (i.e. what is in ~/.opam/repo)</td></tr>
<tr><th><a href="opam-state/OpamSwitchState">opamSwitchState.ml</a></th>
  <td>Loading and querying a switch state</td></tr>
<tr><th><a href="opam-state/OpamPackageVar">opamPackageVar.ml</a></th>
  <td>Resolution and handling of opam variables + filters</td></tr>
<tr><th><a href="opam-state/OpamFileTools">opamFileTools.ml</a></th>
  <td>Generic tools for handling package metadata</td></tr>
<tr><th><a href="opam-state/OpamSwitchAction">opamSwitchAction.ml</a></th>
  <td>Switch-related actions and changes</td></tr>
<tr><th><a href="opam-state/OpamEnv">opamEnv.ml</a></th>
  <td>Process environment setup and handling, shell configuration</td></tr>
<tr><th><a href="opam-state/OpamPinned">opamPinned.ml</a></th>
  <td>Specific query and handling of pinned packages</td></tr>
<tr><th><a href="opam-state/OpamUpdate">opamUpdate.ml</a></th>
  <td>Synchronisation and downloading of repositories and package sources</td></tr>
<tr><th><a href="opam-state/OpamSysInteract">opamSysInteract.ml</a></th>
  <td>Interaction with system package manager, for external dependencies management</td></tr>
<tr><th><a href="opam-state/OpamEmbedCygwinSetup">opamEmbedCygwinSetup.ml</a></th>
  <td>(generated) Contains the Cygwin setup.exe binary if specified in the configure</td></tr>
<tr><th><a href="opam-state/OpamSpdxList">opamSpdxList.ml</a></th>
  <td>(generated) SPDX short IDs licenses list, used for linting packages</td></tr>

<tr class="lib">
  <th><a href="opam-client"><code>src/client</code></a></th>
  <td><em>opam-client</em> library and exec</td>
</tr>

<tr><td colspan="2" class="libnote">
    Actions on the opam root, switches, installations, and front-end
</td></tr>

<tr><td colspan="2" class="sublib"><code>opam-client</code> library</td></tr>

<tr><th><a href="opam-client/OpamClientConfig">opamClientConfig.ml</a></th>
  <td>Configuration options for this lib (record, global reference, setter, initialisation), plus helper for global setup</td></tr>
<tr><th><a href="opam-client/OpamAction">opamAction.ml</a></th>
  <td>Handles concrete actions on packages, like installations and removals</td></tr>
<tr><th><a href="opam-client/OpamSolution">opamSolution.ml</a></th>
  <td>Interface with the solver, processing of full solutions through actions</td></tr>
<tr><th><a href="opam-client/OpamConfigCommand">opamConfigCommand.ml</a></th>
  <td>Functions for the "opam config" subcommand</td></tr>
<tr><th><a href="opam-client/OpamPinCommand">opamPinCommand.ml</a></th>
  <td>Functions for the "opam pin" subcommand</td></tr>
<tr><th><a href="opam-client/OpamRepositoryCommand">opamRepositoryCommand.ml</a></th>
  <td>Functions for the "opam repository" subcommand</td></tr>
<tr><th><a href="opam-client/OpamSwitchCommand">opamSwitchCommand.ml</a></th>
  <td>Functions for the "opam switch" subcommand</td></tr>
<tr><th><a href="opam-client/OpamListCommand">opamListCommand.ml</a></th>
  <td>Functions for the "opam list" subcommand</td></tr>
<tr><th><a href="opam-client/OpamLockCommand">opamLockCommand.ml</a></th>
  <td>Functions for the "opam lock" subcommand</td></tr>
<tr><th><a href="opam-client/OpamInitDefaults">opamInitDefaults.ml</a></th>
  <td>Defines the built-in "opamrc" to use by default on "opam init"</td></tr>
<tr><th><a href="opam-client/OpamClient">opamClient.ml</a></th>
  <td>High-level execution of the main user commands ("install", "upgrade",
  "remove"), and wrapper for Pin commands</td></tr>
<tr><th><a href="opam-client/OpamAuxCommands">opamAuxCommands.ml</a></th>
  <td>Some command helpers and extra opam management functions</td></tr>
<tr><th><a href="opam-client/OpamAdminRepoUpgrade">opamAdminRepoUpgrade.ml</a></th>
  <td>Handles converting package repositories from the format of older opam
  versions to the current format</td></tr>
<tr><th><a href="opam-client/OpamAdminCheck">opamAdminCheck.ml</a></th>
  <td>Implements the repository checks of the 'opam admin check' command.</td></tr>
<tr><th><a href="opam-client/OpamGitVersion">opamGitVersion.mli</a></th>
  <td>(generated) Current git version of opam</td></tr>
<tr><th><a href="opam-client/OpamArg">opamArg.ml</a></th>
  <td>Command-line argument parsers and helpers</td></tr>
<tr><th><a href="opam-client/OpamArgTools">opamArgTools.ml</a></th>
  <td>Command-line argument cli versioning helpers</td></tr>
<tr><th><a href="opam-client/OpamAdminCommand">opamAdminCommand.ml</a></th>
  <td>All sub-commands of the "opam admin" command</td></tr>
<tr><th><a href="opam-client/OpamCommands">opamCommands.ml</a></th>
  <td>Opam CLI commands and their handlers as Cmdliner terms</td></tr>
<tr><th><a href="opam-client/OpamCLIVersion">opamCLIVersion.ml</a></th>
  <td>Functions for the CLI versioning</td></tr>
<tr><th><a href="opam-client/OpamCliMain">opamCliMain.ml</a></th>
  <td>Front-end wrappers and callers for the main opam entry point</td></tr>

<tr><td colspan="2" class="sublib">Main opam CLI</td></tr>
<tr><th><a href="opam-client/OpamMain">opamMain.ml</a></th>
  <td>Main opam entry point</td></tr>

<tr class="lib">
  <th><a><code>src/crowbar</code></a></th>
  <td>crowbar tests</td>
</tr>

<tr><td colspan="2" class="libnote">
    Crowbar generators and tests for internal data structures
</td></tr>

<tr><th><a>test.ml</a></th>
  <td>Main crowbar tests entry point</td></tr>
<tr><th><a>opamCrowbar.ml</a></th>
  <td>Definition of utils structures and functions</td></tr>
<tr><th><a>opamXxx_crowbar.ml</a></th>
  <td>Definition of tests for module <a>Xxx</a></td></tr>

<tr class="lib">
  <th><a><code>src/tools</code></a></th>
  <td>Extra tools and utilities</td>
</tr>

<tr><td colspan="2" class="sublib">Auxiliary standalone tools</td></tr>

<tr><th><a>opam_admin_top.ml</a></th>
  <td>Tiny library for admin-scripts, included in opam-admin.top</td></tr>
<tr><th><a>opam-putenv.c</a></th>
  <td>Tiny C tool used on Windows for cross-architecture process injection</td></tr>
<tr><th><a>opam_installer.ml</a></th>
  <td>Handles opam's ".install" files</td></tr>

</table>

</body>
</html>
